package com.whx.managea.controller;


import com.whx.managea.entity.Result;
import com.whx.managea.entity.User;
import com.whx.managea.service.UserService;
import com.whx.managea.util.ValidateImageCodeUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.image.BufferedImage;

//该控制器层用来接受用户模块相关的请求
@Controller
@RequestMapping("user")
public class UserController {

    @Autowired
    private UserService userService;
    //定义一个专门用来接受生成随机验证码图片请求的方法
    @RequestMapping("getImage")
    public void getImage(HttpServletResponse response, HttpSession session) throws Exception{
        //1.获取一个随机的验证码
        String code = ValidateImageCodeUtils.getSecurityCode();

        //把生成的验证码设置在session域中
        session.setAttribute("code", code);
        //2.根据获取的随机验证码生成一张验证码图片
        BufferedImage image = ValidateImageCodeUtils.createImage(code);
        //3.把生成的验证码图片传输到前端对应发送请求的img标签中
        ImageIO.write(image, "png", response.getOutputStream());

    }


    //定义一个用来接受注册请求的方法
    //因为发送的注册请求是一个ajax请求，所在在处理完请求后需要返回一个json对象数据@ResponseBody
    @RequestMapping("regist")
    @ResponseBody
    public Result regist(String code, HttpSession session, User user){
           //result是在处理完注册请求后所返回的json对象
        //1.创建result对象
        Result result = new Result();


        //2.判断验证码是否一致
        //1.获取正确的验证码
        String code1=(String)session.getAttribute("code");

        try {
            if (code1.equalsIgnoreCase(code)){
                //当验证码一致的时候，调用业务层
                userService.regist(user);
                result.setMessage("注册成功!").setStatus(true);
                return result;


            }
            throw  new RuntimeException("验证码有误！");
        }catch (Exception e){
            result.setMessage(e.getMessage()).setStatus(false);

        }

        return result;

    }


    //定义一个请求用来接受登录操作
    @RequestMapping("login")
    @ResponseBody
    public Result login(HttpSession session,String code,User user){
        //1.创建result对象
        Result rs=new Result();
        //
        String code1=(String)session.getAttribute("code");
        System.out.println(user.toString());
        try {
            //2.判断用户输入的验证码和生成的验证码是否一致
            if (code1.equalsIgnoreCase(code)){
                //3.调用业务层
                User user1 = userService.login(user);
                //把登录成功的用户信息设置在seesion域中
                session.setAttribute("user", user1);
                rs.setMessage("登录成功！").setStatus(true);
                return  rs;
            }
            throw new RuntimeException("验证码有误！");
        }catch (Exception e){
            rs.setStatus(false).setMessage(e.getMessage());
        }
        return  rs;
    }


    //用户退出功能
    @RequestMapping("back")
    public String back(HttpSession session){
        //1.清空session域中的数据
        session.invalidate();//清空
        //2.跳转到login.jsp登录页面
        return "redirect:/back/login.jsp";
    }
}
